package superBarbershop;

public class Peluqueros {
    public final static int NUM = 2;
    private Cliente[] sillas;
    private Caja caja;
    private Sofa sofa;
    
    public Peluqueros(Sofa s, Caja c) {
        sillas = new Cliente[NUM];
        caja = c;
        sofa = s;
    }
    
    public Cliente[] sillas() {
        return sillas;
    }
    
    public void atender(Cliente cliente) {
        for (int i = 0; i < sillas.length; i++)
            if (sillas[i] == null) {
                sillas[i] = cliente;
                Registro.actualizar(System.currentTimeMillis(),
                                    cliente.id(), 4);
                Thread t = new Thread(new Servicio(cliente.tiempoServ(), i));
                t.start();
                return;
            }
        
        sofa.agregar(cliente);
    }
    
    public void liberar(int peluquero) {
        if (peluquero < 0 || sillas.length < peluquero)
            throw new IndexOutOfBoundsException("Peluquero no válido");
        
        if (sillas[peluquero] == null)
            throw new IllegalArgumentException("Ese peluquero está libre");
        
        Registro.actualizar(System.currentTimeMillis(),
                            sillas[peluquero].id(), 5);
        caja.cobrar(sillas[peluquero]);
        sillas[peluquero] = null;
    }
    
    private class Servicio implements Runnable
    {
        private int tiempo;
        private int peluquero;
        
        public Servicio(int t, int p)
        {
            tiempo = t;
            peluquero = p;
        }
        
        @Override
        public void run()
        {
            try
            {
                Thread.sleep(tiempo * 1000);
                liberar(peluquero);
            }
            catch (InterruptedException e) {}
        }
    }
}
